package cn.edu.scut.hsrc.util;

import java.util.ArrayList;
import java.util.List;

import cn.edu.scut.hsrc.bean.Pair;
import cn.edu.scut.hsrc.bean.WordType;
import cn.edu.scut.hsrc.bean.WordType.Type;
import cn.edu.scut.suggestion.segmentation.Segment;


/**
 * 分词器工具类，这个类保存了一般的分隔符，和分词器
 * @file CommSplits.java
 * @author tian.yuchen
 *
 */

public class SegUtil {
	
	//private final static SegTag SEG_TAG = new SegTag(1);					//分词器
	
	public static ArrayList<String> SPLITS = new ArrayList<String>();	//分隔符
	public static String SPLITS_STRING = "";							//分隔符对应的字符串
	static{
		SPLITS.add(" ");
		SPLITS.add("_");
		SPLITS.add("——");
		SPLITS.add("-");
		SPLITS.add("-");
		SPLITS.add("—");
		SPLITS.add("：");
		SPLITS.add(":");
		SPLITS.add("|");
		SPLITS.add("|");
		SPLITS.add(",");
		SPLITS.add("，");
		SPLITS.add("<");
		SPLITS.add(">");
		SPLITS.add("。");
		SPLITS.add("——");
		SPLITS.add("【");
		SPLITS.add("】");
		SPLITS.add("(");
		SPLITS.add(")");
		SPLITS.add("（");
		SPLITS.add("）");
		SPLITS.add(".");
		SPLITS.add(",");
		SPLITS.add("、");
		SPLITS.add("·");
		SPLITS.add(" ");
		SPLITS.add("“");
		SPLITS.add("”");
		SPLITS.add(".");
		SPLITS.add("..");
		SPLITS.add("__");
		SPLITS.add("--");
		SPLITS.add("&");
		SPLITS.add("!");
		SPLITS.add(">>");
		SPLITS.add("！");
		SPLITS.add("?");
		SPLITS.add("《");
		SPLITS.add("》");
		SPLITS.add("；");
		SPLITS.add("\"");
		SPLITS.add("'");
		SPLITS.add("...");
		SPLITS.add("?");
		SPLITS.add("―");
		SPLITS.add("――");
		SPLITS.add("［");
		SPLITS.add("]");
		SPLITS.add("[");
		SPLITS.add(";");
		SPLITS.add("，");
		SPLITS.add(";");
		
		for (String tmpString : SPLITS) {
			SPLITS_STRING += tmpString;
			
		}
		//SPLITS_STRING = SPLITS_STRING.substring(0, SPLITS_STRING.length()-1);
	}
	
	/**
	 * 对字符串string进行分词，返回<词,词性>对的集合
	 * @param string
	 * @return
	 */
	/*
	public static List<Pair<String, Type>> seg(String string)
	{
		List<Pair<String, Type>> results = new ArrayList<Pair<String,Type>>();
		//如果字符串本身为null，或者为空字符串
		if(string == null || string.equals(""))
			return results;
		//调用分词器进行分词，返回分词后的字符串
		SegResult segResult = SegUtil.SEG_TAG.split(string);
		String sTempStr = segResult.getFinalResult();
		//对返回后的字符串进行分析
		String [] strArrays = sTempStr.split(" +");
		int size = strArrays.length;
		for(int i=0;i<size;i++)
		{
			int tmpIndex = strArrays[i].lastIndexOf("/");
			//如果没有词性标注，直接进入下一轮循环
			if(tmpIndex < 0)
				continue;
			//对词的词性进行分析
			String text = strArrays[i].substring(0,tmpIndex);
			Type type = WordType.getType(strArrays[i].substring(tmpIndex+1));	//获取词性
			results.add(new Pair<String, Type>(text,type));
		}
		return results;
	}
	*/
	
	public static List<Pair<String, Type>> seg(String string)
	{
		List<Pair<String, Type>> results = new ArrayList<Pair<String,Type>>();
		//如果字符串本身为null，或者为空字符串
		if(string == null || string.equals(""))
			return results;
		//调用分词器进行分词，返回分词后的字符串
		String sTempStr = Segment.splitwithType(string);
		//对返回后的字符串进行分析
		String [] strArrays = sTempStr.split(" +");
		int size = strArrays.length;
		for(int i=0;i<size;i++)
		{
			int tmpIndex = strArrays[i].lastIndexOf("/");
			//如果没有词性标注，直接进入下一轮循环
			if(tmpIndex < 0)
				continue;
			//对词的词性进行分析
			String text = strArrays[i].substring(0,tmpIndex);
			Type type = WordType.getType(strArrays[i].substring(tmpIndex+1));	//获取词性
			results.add(new Pair<String, Type>(text,type));
		}
		return results;
	}
}
